package com.elitedatai.mchtest.media.service;

import com.dji.sdk.cloudapi.media.MediaUploadCallbackRequest;
import com.dji.sdk.common.PaginationData;
import com.elitedatai.mchtest.media.model.MediaFileDTO;

import java.net.URL;
import java.util.List;


public interface IFileService {

    /**
     * 根据工作空间ID和文件指纹查询文件是否已存在
     * @param workspaceId 工作空间ID
     * @param fingerprint 文件指纹（用于唯一标识文件）
     * @return 如果文件已存在返回true，否则返回false
     */
    Boolean checkExist(String workspaceId, String fingerprint);

    /**
     * 将文件的基本信息保存到数据库中
     * @param workspaceId 工作空间ID
     * @param file 媒体上传回调请求对象，包含文件信息
     * @return 返回保存操作影响的行数
     */
    Long saveFile(String workspaceId, MediaUploadCallbackRequest file);

    /**
     * 根据工作空间ID查询该工作空间下所有文件的信息
     * @param workspaceId 工作空间ID
     * @return 返回媒体文件DTO列表
     */
    List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId);

    /**
     * 分页查询工作空间下的所有媒体文件
     * @param workspaceId 工作空间ID
     * @param page 页码（从1开始）
     * @param pageSize 每页大小
     * @return 返回分页数据，包含媒体文件DTO列表和分页信息
     */
    PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize);

    /**
     * 获取文件的下载地址
     * @param workspaceId 工作空间ID
     * @param fileId 文件ID
     * @return 返回文件的下载URL
     */
    URL getObjectUrl(String workspaceId, String fileId);

    /**
     * 查询指定作业的所有媒体文件
     * @param workspaceId 工作空间ID
     * @param jobId 作业ID
     * @return 返回媒体文件DTO列表
     */
    List<MediaFileDTO> getFilesByWorkspaceAndJobId(String workspaceId, String jobId);
}